問題 §
以下のコードはHello, World!を10回出力することを意図している。しかし、Visual Studio 2022でエラーも警告も何も出ないが、1回しか出力しない。バグがあることは承知しているが、非同期ラムダ式がAction型に代入できることは納得できない。
Action<int> sub = async (n) =>
{
for (int i = 0; i < n; i++)
{
Console.WriteLine("Hello, World!");
await Task.Delay(1000);
}
};
Action<int> act = sub;
act(10);
原因 §
不明 (void型を返す非同期ラムダ式と解釈されている可能性はある)
解決 §
ActionではなくFuncを使うとエラーCS4010を受け取ることができる。